import { getToken, setToken, removeToken } from '@/utils/auth'
// 导入登录接口
import { loginAPI, getUserInfoAPI, getUserDetailById } from '@/api/user'
import { resetRouter } from '@/router'
export default {
  // 开启命名空间（模块化）
  namespaced: true,
  // 定义变量
  state: {
    token: getToken() || '',
    userInfo: {}
  },
  // 修改变量（数据管家）
  mutations: {
    // 获取token
    setToken(state, token) {
      state.token = token
      setToken(token)
    },
    // 删除token
    delToken(state) {
      state.token = ''
      removeToken()
    },
    // 设置用户信息
    setUserInfo(state, userInfo) {
      state.userInfo = userInfo
    },
    // 删除用户信息
    reomveUserInfo(state) {
      state.userInfo = {}
    }
  },
  // 发送异步请求，来控制mutations
  actions: {
    /**
     * 调用登录接口并存储token
     * @param {*} ctx 上下文
     * @param {*} loginForm 调用loginAction传入的参数值
     */
    async loginAction(ctx, loginForm) {
      // 1. 发请求获取token
      const token = await loginAPI(loginForm)
      console.log('登录成功token:', token)
      // 2. 存储token？
      // ctx.commit === 等价于 this.$store.commit
      ctx.commit('setToken', token)
    },
    async getUserInfoAction({ commit }, loginForm) {
      const userInfo = await getUserInfoAPI()
      const baseInfo = await getUserDetailById(userInfo.userId)
      console.log('头像信息', baseInfo)// 为了获取头像
      commit('setUserInfo', { ...userInfo, ...baseInfo })
      console.log('获取用户个人信息：', userInfo)
      // commit('setUserInfo', userInfo)
      // 返回当前登录人的权限数据
      return userInfo.roles
    },
    // 登出
    logout(context) {
      // 清除token
      context.commit('delToken')
      // 清除用户信息
      context.commit('reomveUserInfo')
      // 1. 重置路由， 避免缓存
      resetRouter()
      // 2. 清除菜单数据，只留下静态路由
      // 说明❓：user模块调用menus模块中mutations方法，
      // 需要传入 {root:true}，才能跨模块调用
      context.commit('menus/setList', [], { root: true })
    }
  }
}

